package com.ygxsk.carhome.wxapi;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import com.blankj.utilcode.util.ActivityUtils;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram;
import com.tencent.mm.opensdk.modelmsg.ShowMessageFromWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.umeng.socialize.weixin.view.WXCallbackActivity;
import com.ygxsk.carhome.helper.PushConstants;
import com.ygxsk.carhome.sys.Session;

import java.lang.ref.WeakReference;

//import com.tencent.mm.opensdk.modelbase.BaseResp;

/*
 * @Author:itchenqi
 * @Time:2020/4/14 0014  10:07
 * @Description: 添加调用小程序的回调说明
 */
//public class WXEntryActivity extends WXCallbackActivity implements IWXAPIEventHandler {
//public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
public class WXEntryActivity extends WXCallbackActivity implements IWXAPIEventHandler {

    /***/
    private Session mSession;

    /**
     * 添加微信分享要用到的
     */
    private IWXAPI wxApiProperty;
    private MyHandler handler;

    private static class MyHandler extends Handler {

        private final WeakReference<WXEntryActivity> wxEntryActivityWeakReference;

        public MyHandler(WXEntryActivity wxEntryActivity) {
            wxEntryActivityWeakReference = new WeakReference<WXEntryActivity>(wxEntryActivity);
        }

        @Override
        public void handleMessage(Message msg) {
            int tag = msg.what;
            switch (tag) {


//                case NetworkUtil.GET_TOKEN: {
//                    Bundle data = msg.getData();
//                    JSONObject json = null;
//                    try {
//                        json = new JSONObject(data.getString("result"));
//                        String openId, accessToken, refreshToken, scope;
//                        openId = json.getString("openid");
//                        accessToken = json.getString("access_token");
//                        refreshToken = json.getString("refresh_token");
//                        scope = json.getString("scope");
//                        Intent intent = new Intent(wxEntryActivityWeakReference.get(), SendToWXActivity.class);
//                        intent.putExtra("openId", openId);
//                        intent.putExtra("accessToken", accessToken);
//                        intent.putExtra("refreshToken", refreshToken);
//                        intent.putExtra("scope", scope);
//                        wxEntryActivityWeakReference.get().startActivity(intent);
//                    } catch (JSONException e) {
//                        Log.e(TAG, e.getMessage());
//                    }
//                }


            }
        }
    }


    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        mSession = Session.get(this.getBaseContext());

        //2020-7-22 10:08:15 从【供销美家】小程序过来的时候，会调用这个方法。
        if (mSession != null) {
            //wxApiProperty = MMKV.defaultMMKV().decodeParcelable(ConstantApi.MMKV_WXAPIPROPERTY, WXApiProperty.class);
            //wxApiProperty = mSession.getWxApiProperty();
            wxApiProperty = WXAPIFactory.createWXAPI(this, PushConstants.WEIXIN_APPID, false);
            //LogUtils.d("itchen----->WXEntryActivity onCreate()");

            try {

                //do
                //LogUtils.d("itchen----getWxApi 的内容--->" + PropertyRedApplication.getInstance().getWxApi());

                //if (PropertyRedApplication.getInstance().getWxApi() != null) {
                if (wxApiProperty != null) {

                    //boolean handlerBoolean = PropertyRedApplication.getInstance().getWxApi().handleIntent(getIntent(), this);
                    boolean handlerBoolean = wxApiProperty.handleIntent(getIntent(), this);
                    //LogUtils.d("itchen---->handlerBoolean---->" + handlerBoolean);
                    handler = new MyHandler(this);

                    if (!handlerBoolean) {

                        ActivityUtils.finishActivity(this);

                    } else {

                        //LogUtils.d("itchen---->是 真 true");
                        //这里好像要发送消息，关闭分享的进度圈圈。

                    }

                }

            } catch (Exception e) {
                //catch
                e.printStackTrace();
                //LogUtils.d("itchen-----从小程序回来报错信息----->" + e.getMessage());
            }

        }


    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        //LogUtils.d("itchen----->走到了逻辑 onNewIntent");

        setIntent(intent);

        if (wxApiProperty != null) {
            wxApiProperty.handleIntent(intent, this);
        }
    }

    /**
     * 微信发送的请求将回调到onReq方法，小程序调起APP回调。
     * 代码的含义是从这个网址来的：
     * https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html
     */
    @Override
    public void onReq(BaseReq baseReq) {//实现 IWXAPIEventHandler 接口，微信发送的请求将回调到 onReq 方法

        //LogUtils.d("itchen----->小程序的回调 第一个  可能用不到");

        switch (baseReq.getType()) {

            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: {

                //如果是从微信过来的
                //LogUtils.d("itchen----->是从微信调用 返回 过来的。");

                break;
            }

            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX: {

                goToShowMsg((ShowMessageFromWX.Req) baseReq);

                break;
            }

            default:
                break;
        }

    }

    /**
     * 接收从小程序 跳转到app的数据，并进行处理
     */
    private void goToShowMsg(ShowMessageFromWX.Req showReq) {

        WXMediaMessage wxMsg = showReq.message;

        if (wxMsg != null) {
            //LogUtils.d("itchen----接收到 从小程序过来的消息--->" + wxMsg.description);
        }

        //按说是该直接跳转到首页的，因为我们【红色物业】是直接从首页启动到小程序的，那么直接杀死该界面，背后就是首页界面
        /*Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();*/

        if (ActivityUtils.isActivityAlive(this)) {
            //LogUtils.d("itchen---执行杀死该界面。");
            ActivityUtils.finishActivity(this);
        }

    }

    //发送到微信请求的响应结果将回调到 onResp 方法.
    //发送到微信请求的响应结果将回调到 onResp 方法.
    @Override
    public void onResp(BaseResp baseResp) {

        //LogUtils.d("itchen----->小程序的回调 内容 ");

        if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {

            WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
            //Resp launchMiniProResp = (Resp) baseResp;
            String extraData = launchMiniProResp.extMsg; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性

            //LogUtils.d("itchen----->小程序的回调说明--->"+extraData);
            //finish();  //需要在小程序返回APP的时候，finish这个页面，否则其他页面无法点击

            if (ActivityUtils.isActivityAlive(this)) {
                //LogUtils.d("itchen---onResp--执行杀死该界面。");
                ActivityUtils.finishActivity(this);
            }

        } else {

            //2021年01月30日：https://blog.csdn.net/xiaoshuxgh/article/details/90515910
            //微信分享回调与APP打开小程序冲突
            super.onResp(baseResp);//一定要加super，实现我们的方法，否则不能回调   重重重要   关键在于这一句
            //LogUtils.d("itchen----执行到了 onResp 的其他内容。");

        }

    }
}
